package ig.metrica.origenesdedatos;


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * The Data Transfer Object class.
 * Created 3/04/2006 12:19:55 PM
 * @author jsanchez
 */
public class OrigenesdatosDTO implements java.io.Serializable {
    
    private java.lang.Integer id;
    private java.lang.String entidad;
    private java.lang.String campos=null;
    private java.lang.String query;
    private java.lang.Integer consecutivo;
    private java.lang.Integer idconexion;
    private boolean dirty = false; //dirty flag
    private java.lang.String nombreArchivo;
    private java.lang.String conexion;
    private java.lang.String tipo;
    
    
    public OrigenesdatosDTO(){
    }
    
    public OrigenesdatosDTO(java.lang.Integer id, java.lang.String entidad, java.lang.String campos, java.lang.String query, java.lang.Integer consecutivo,String nombreArchivo, Integer idconexion, String tipo){
        this.id = id;
        this.entidad = entidad;
        this.campos = campos;
        this.query = query;
        this.consecutivo = consecutivo;
        this.nombreArchivo=nombreArchivo;
        this.idconexion = idconexion;
        this.tipo=tipo;
    }
    
    public OrigenesdatosDTO(java.lang.Integer id, java.lang.String entidad, java.lang.String campos, java.lang.String query, java.lang.Integer consecutivo, Integer idconexion, String tipo){
        this.id = id;
        this.entidad = entidad;
        this.campos = campos;
        this.query = query;
        this.consecutivo = consecutivo;
        this.idconexion = idconexion;
        this.tipo=tipo;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }
    
    public void setIdconexion(Integer idconexion) {
        this.idconexion = idconexion;
    }

    public Integer getIdconexion() {
        return idconexion;
    }
    

    private void setDirty(){
        dirty = true;
    }
    
    public boolean isDirty(){
        return dirty;
    }
    
    public void resetDirty(){
        dirty = false;
    }

    public String getNombreArchivo() {
        return nombreArchivo;
    }

    public void setNombreArchivo(String nombreArchivo) {
        this.nombreArchivo = nombreArchivo;
        setDirty();        
    }
    

    public java.lang.Integer getId(){ return id; }
    public void setId(java.lang.Integer id){
        this.id = id;
        setDirty();
    }
    
    public java.lang.String getEntidad(){ return entidad; }
    public void setEntidad(java.lang.String entidad){
        this.entidad = entidad;
        setDirty();
    }
    
    public java.lang.String getCampos(){ return campos; }
    public void setCampos(java.lang.String campos){
        this.campos = campos;
        setDirty();
    }
    
    public java.lang.String getQuery(){ return query; }
    public void setQuery(java.lang.String query){
        this.query = query;
        setDirty();
    }
    
    public java.lang.Integer getConsecutivo(){ return consecutivo; }
    public void setConsecutivo(java.lang.Integer consecutivo){
        this.consecutivo = consecutivo;
        setDirty();
    }

    public String getConexion() {
        return conexion;
    }

    public void setConexion(String conexion) {
        this.conexion = conexion;
    }
    
    // populate DTO from Object
//    public void populate(Object o) {
//        Method[] methods = o.getClass().getMethods();
//        for (int i = 0; i < methods.length; i++) {
//            try{
//                String methodName = methods[i].getName();
//                if ((methodName.startsWith("get") ||
//                        methodName.startsWith("is"))
//                        && Modifier.isPublic(methods[i].getModifiers())
//                        && methods[i].getParameterTypes().length == 0
//                        && !methodName.equals("getClass")) {
//                    String setMethodName = methodName.replaceFirst(methodName.startsWith("get")?"get":"is","set");
//                    getClass().getMethod(setMethodName,new Class[]{methods[i].getReturnType()}).
//                            invoke(this, new Object[]{methods[i].invoke(o,null)});
//                }
//            }catch(IllegalAccessException ilE){
//                ilE.printStackTrace();
//            }catch(InvocationTargetException invE){
//                invE.printStackTrace();
//            }catch(NoSuchMethodException noE){
//                // Don't find setMethod for field
//            }
//        }
//    }
    
    
    /**
     * @see java.lang.Object#toString()
     */
    public String toString(){        
        String STRING="-----";
        STRING=this.id.toString()+STRING.substring(this.id.toString().length(),STRING.length());
        return STRING+this.entidad+"["+this.consecutivo+"]";
    }
    
    /**
     * @see java.lang.Object#equals(java.lang.Object)
     */
    public boolean equals(java.lang.Object otherOb) {
        
        if (this == otherOb) {
            return true;
        }
        if (!(otherOb instanceof ig.metrica.origenesdedatos.OrigenesdatosDTO)) {
            return false;
        }
        ig.metrica.origenesdedatos.OrigenesdatosDTO other = (ig.metrica.origenesdedatos.OrigenesdatosDTO) otherOb;
        return (
                
                (id==null?other.id==null:id.equals(other.id))
                &&
                (entidad==null?other.entidad==null:entidad.equals(other.entidad))
                &&
                (campos==null?other.campos==null:campos.equals(other.campos))
                &&
                (query==null?other.query==null:query.equals(other.query))
                &&
                (consecutivo==null?other.consecutivo==null:consecutivo.equals(other.consecutivo))
                &&
                (nombreArchivo==null?other.nombreArchivo==null:nombreArchivo.equals(other.nombreArchivo))                
                );
    }
    
    /**
     * @see java.lang.Object#hashCode()
     */
    public int hashCode() {
        return (
                
                (id==null?0:id.hashCode())
                ^
                (entidad==null?0:entidad.hashCode())
                ^
                (campos==null?0:campos.hashCode())
                ^
                (query==null?0:query.hashCode())
                ^
                (consecutivo==null?0:consecutivo.hashCode())
                ^
                (nombreArchivo==null?0:nombreArchivo.hashCode())                
                );
    }
    
}
